package cn.icanci.ladybird.service.util.impl;

import cn.icanci.ladybird.common.util.FtpUtil;
import cn.icanci.ladybird.common.util.IDUtils;
import cn.icanci.ladybird.service.util.NginxService;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author: icanci
 * @date: Created in 2020/10/5 4:45
 * @classAction: 文件上传到Nginx服务器实现类
 */
@Service
@Slf4j
public class NginxServiceImpl implements NginxService {
    /**
     * 上传数据到云服务器
     *
     * @param uploadFile 需要上传的对象
     * @return 返回数据传递的地址
     */
    @Override
    public Object uploadPicture(MultipartFile uploadFile) {
        //1、给上传的图片生成新的文件名
        //1.1获取原始文件名
        String oldName = uploadFile.getOriginalFilename();
        //1.2使用IDUtils工具类生成新的文件名，新文件名 = newName + 文件后缀
        String newName = IDUtils.genImageName();
        assert oldName != null;
        newName = newName + oldName.substring(oldName.lastIndexOf("."));
        //1.3生成文件在服务器端存储的子目录
        String filePath = new DateTime().toString("/yyyyMMdd/");
        //2、把图片上传到图片服务器
        //2.1获取上传的io流
        InputStream input = null;
        try {
            input = uploadFile.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.2调用FtpUtil工具类进行上传
        return FtpUtil.putImages(input, filePath, newName);
    }

    /**
     * 上传数据到云服务器
     *
     * @param inputStream 需要上传的流对象
     * @return 返回数据传递的地址
     */
    @Override
    public Object uploadPicture(InputStream inputStream, String title, Long orderId) {
        //1.2使用IDUtils工具类生成新的文件名，新文件名 = newName + 文件后缀
        String newName = title + orderId + ".png";
        //1.3生成文件在服务器端存储的子目录
        String filePath = new DateTime().toString("/yyyyMMdd/");
        //2、把图片上传到图片服务器
        //2.2调用FtpUtil工具类进行上传
        return FtpUtil.putImages(inputStream, filePath, newName);
    }
}
